//发送邮件的模块
const nodemailer = require('nodemailer');
const config_module = require('./config');


//发送邮件的代理
let transport = nodemailer.createTransport({
    host: 'smtp.163.com',
    port: 465,
    secure: true,
    auth: {
        user: config_module.email_user,  //发送方
        pass: config_module.email_pass
    }
});

/*
transport.sendMail是一个异步函数,它使用回调函数来通知操作的结果。
因此我们不能同步地等待sendMail,完成并获取其结果,因为JavaScript的运行环境是单线程的,并且不会阻塞等待异步操作完成。

我们可以使用Promise对象来封装这个调用。Promise提供了一种机制,允许我们在将来的某个时间点处理异步操作的结果,无论是成功还是失败。
用Promise封装这个调用，抛出Promise给外部，那么外部就可以通过await或者then catch的方式处理了

该函数由server.js文件调用
*/
function SendMail(mailOptions) {
    return new Promise(function(resolve, reject) {
        transport.sendMail(mailOptions, function(error, info) {
            if (error) {
                console.log('邮件发送出错: ', error);
                reject(error);
            } else {
                console.log('邮件已发送: ' + info.response);
                resolve(info.response);
            }
        });
    })
}

module.exports.SendMail = SendMail

